package net.dodoman.mini;

import java.awt.Color;
import java.awt.FileDialog;
import java.awt.Font;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

import javax.swing.JFrame;

public class MiniEdit extends JFrame implements ActionListener {

	private static final long serialVersionUID = -5022759021555693906L;
	/**
	 * Method main
	 * 
	 * 
	 * @param args
	 * 
	 */
	MenuBar menuBar = new MenuBar();
	Menu file = new Menu("File"), edit = new Menu("Edit"), help = new Menu(
			"Help");

	MenuItem[] menuItem = { new MenuItem("New"), new MenuItem("Open"),
			new MenuItem("Save"), new MenuItem("Exit"),
			new MenuItem("Select All"), new MenuItem("Copy"),
			new MenuItem("Cut"), new MenuItem("Paste"), new MenuItem("Help") };

	TextArea textArea = new TextArea();
	String fileName = "NoName";
	Toolkit toolKit = Toolkit.getDefaultToolkit();
	Clipboard clipboard = toolKit.getSystemClipboard();

	// open and close message dialogs
	private FileDialog openFileDialog = new FileDialog(this, "Open File",
			FileDialog.LOAD);
	private FileDialog saveFileDialog = new FileDialog(this, "Save File",
			FileDialog.SAVE);

	public static void main(String[] args) {
		// TODO: Add your code here
		MiniEdit MyEdit = new MiniEdit();
		// MyEdit.show();
		MyEdit.setVisible(true);
	}

	/**
	 * Method MiniEdit
	 * 
	 * 
	 */
	public MiniEdit() {
		// TODO: Add your code here
		setTitle("MiniEdit");
		setFont(new Font("Times New Roman", Font.PLAIN, 15));
		setBackground(Color.white);
		setSize(500, 500);

		setMenuBar(menuBar);
		menuBar.add(file);
		menuBar.add(edit);
		menuBar.add(help);
		for (int i = 0; i < 4; i++) {
			file.add(menuItem[i]);
			edit.add(menuItem[i + 4]);
		}
		help.add(menuItem[8]);
		add(textArea);

		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				e.getWindow().dispose();
				System.exit(0);
			}
		});

		// add actionListener
		for (int i = 0; i < menuItem.length; i++) {
			menuItem[i].addActionListener(this);
		}

	}

	/**
	 * Method actionPerformed
	 * 
	 * 
	 * @param e
	 * 
	 */
	public void actionPerformed(ActionEvent e) {
		// TODO: Add your code here
		Object eventSource = e.getSource();
		// newItem
		if (eventSource == menuItem[0]) {
			textArea.setText("");
		}
		// OpenItem
		else if (eventSource == menuItem[1]) {
			openFileDialog.show();
			fileName = openFileDialog.getDirectory() + openFileDialog.getFile();
			if (fileName != null) {
				openFile(fileName);
			}
		}
		// SaveItem
		else if (eventSource == menuItem[2]) {
			saveFileDialog.show();
			fileName = saveFileDialog.getDirectory() + saveFileDialog.getFile();
			if (fileName != null) {
				writeFile(fileName);
			}
		}
		// exitItem
		else if (eventSource == menuItem[3])// exitItem
		{
			System.exit(0);
		}
		// Select All
		else if (eventSource == menuItem[4]) {
			textArea.selectAll();
		} // copy
		else if (eventSource == menuItem[5]) {
			String text = textArea.getSelectedText();
			StringSelection selection = new StringSelection(text);

			clipboard.setContents(selection, null);

		}
		// cut
		else if (eventSource == menuItem[6]) {
			String text = textArea.getSelectedText();
			StringSelection selection = new StringSelection(text);

			clipboard.setContents(selection, null);
			textArea.replaceText("", textArea.getSelectionStart(), textArea
					.getSelectionEnd());
		}
		// Paste
		else if (eventSource == menuItem[7]) {
			Transferable contents = clipboard.getContents(this);
			if (contents == null)
				return;
			String text;
			text = "";
			try {
				text = (String) contents
						.getTransferData(DataFlavor.stringFlavor);

			} catch (Exception ex) {
			}
			textArea.replaceText(text, textArea.getSelectionStart(), textArea
					.getSelectionEnd());
		} else if (eventSource == menuItem[8]) {
			// JOptionPane.showMessageDialog(null,"This is a MiniEdit.");
		}

	}

	// Read file
	public void openFile(String fileName) {
		try {
			File file = new File(fileName);
			FileReader readIn = new FileReader(file);
			int size = (int) file.length();
			int charsRead = 0;
			char[] content = new char[size];
			while (readIn.ready())
				charsRead += readIn.read(content, charsRead, size - charsRead);
			readIn.close();
			textArea.setText(new String(content, 0, charsRead));
		} catch (Exception e) {
			System.out.println("Error opening file!");
		}
	}

	// write file
	public void writeFile(String fileName) {
		try {
			File file = new File(fileName);
			FileWriter write = new FileWriter(file);
			write.write(textArea.getText());
			write.close();
		} catch (Exception e) {
			System.out.println("Error closing file!");
		}
	}

}
